/*
 * Nombre: AsignaturaOptativa.java
 * Version: 1.0.1
 * Autor: Amado de Jesús Canté Cauich
 * Creado: 15-feb-2013
 * Modificado: 16-feb-2013 (Eliminada dependencia de carrera).
 * Diagrama: GAPI v2.3.1
 * Caso de uso: MGPE1, MGPE2, MGPE3, MGOA1, MGOA2, MGOA3, MGOA4, MGOA5, MCAAL6,
 *  MCAAL7, MCAAL8,  MCAAL9, MCAAL10, MCAAL11, MGH1
 */
package Dominio;

/**
 * Clase que representa una asignatura optativa mediante sus atributos area de
 * concentración y programa educativo
 *
 * @author amado.cante
 */
public class AsignaturaOptativa extends Asignatura {

    private AreaConcentracion areaDeConcentracion;
    private ProgramaEducativo programaEducativo;

    /**
     * Método constructor vacío
     */
    public AsignaturaOptativa() {
    }

    /**
     * Método constructor
     *
     * @param areaDeConcentracion - EL área de concentración de la asignatura
     * optativa
     * @param claveAsignatura - La clave de la asignatura
     * @param nombreAsignatura - EL nombre de la asignatura
     */
    public AsignaturaOptativa(AreaConcentracion areaDeConcentracion, int claveAsignatura, String nombreAsignatura) {
        super(claveAsignatura, nombreAsignatura);
        this.areaDeConcentracion = areaDeConcentracion;
    }

    /**
     * Método constructor
     *
     * @param areaDeConcentracion - El área de concentración de la asignatura
     * optativa
     * @param nombreAsignatura - El nombre de la asignatura
     */
    public AsignaturaOptativa(AreaConcentracion areaDeConcentracion, String nombreAsignatura) {
        super(nombreAsignatura);
        this.areaDeConcentracion = areaDeConcentracion;
    }

    /**
     * Método constructor
     *
     * @param areaDeConcentracion - EL área de concentración de la asignatura
     * optativa
     * @param programaEducativo - El programa educativo de la asignatura
     * optativa
     * @param claveAsignatura - La clave de la asignatura
     * @param nombreAsignatura - El nombre de la asignatura
     */
    public AsignaturaOptativa(AreaConcentracion areaDeConcentracion, ProgramaEducativo programaEducativo, int claveAsignatura, String nombreAsignatura) {
        super(claveAsignatura, nombreAsignatura);
        this.areaDeConcentracion = areaDeConcentracion;
        this.programaEducativo = programaEducativo;
    }

    /**
     * Método constructor
     *
     * @param nombreAsignatura - El nombre de la asignatura
     * @param areaDeConcentracion - EL área de concentración de la asignatura
     * optativa
     */
    public AsignaturaOptativa(String nombreAsignatura, String areaDeConcentracion) {
        super(nombreAsignatura);
        this.areaDeConcentracion = new AreaConcentracion(areaDeConcentracion);
    }

    /**
     * Método constructor
     *
     * @param areaDeConcentracion - EL área de concentración de la asignatura
     * optativa
     * @param programaEducativo - El programa educativo de la asignatura
     * optativa
     * @param nombreAsignatura - El nombre de la asignatura
     */
    public AsignaturaOptativa(AreaConcentracion areaDeConcentracion, ProgramaEducativo programaEducativo, String nombreAsignatura) {
        super(nombreAsignatura);
        this.areaDeConcentracion = areaDeConcentracion;
        this.programaEducativo = programaEducativo;
    }

    /**
     * Retorna el programa educativo de la asignatura optativa
     *
     * @return el programa educativo de la asignatura optativa
     */
    public ProgramaEducativo getProgramaEducativo() {
        return programaEducativo;
    }

    /**
     * Asigna el programa educativo de la asignatura optativa
     *
     * @param programaEducativo - El programa educativo de la asignatura
     * optativa
     */
    public void setProgramaEducativo(ProgramaEducativo programaEducativo) {
        this.programaEducativo = programaEducativo;
    }

    /**
     * Retorna el área de concentración de la asignatura optativa
     *
     * @return el área de concentración de la asignatura optativa
     */
    public AreaConcentracion getAreaDeConcentracion() {
        return areaDeConcentracion;
    }

    /**
     * Asigna el área de concentración de la asignatura optativa
     *
     * @param areaDeConcentracion - El área de concentración de la asignatura
     * optativa
     */
    public void setAreaDeConcentracion(AreaConcentracion areaDeConcentracion) {
        this.areaDeConcentracion = areaDeConcentracion;
    }

    /**
     * Retorna la información de la asignatura optativa dada por su nombre y su
     * área de concentración
     *
     * @return información de la asignatura optativa
     */
    @Override
    public String toString() {
        return super.toString() + " - Area->" + this.getAreaDeConcentracion().toString();
    }
}
